package com.study.jdbc.junit;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.util.UUID;

import javax.sql.rowset.serial.SerialBlob;
import javax.sql.rowset.serial.SerialClob;

import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;

import com.study.jdbc.utils.DBCPUtil;

/**
* @Name: DBUtilsTest
* @Description: DButils工具测试类
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-2-19 下午8:24:21 
* @Version: V1.0
 */
public class DBUtilsTest {
	
	private QueryRunner queryRunner = new QueryRunner(DBCPUtil.getDataSource()) ;
	
	/**
	* @Name: saveClob
	* @Description: 使用DBUtils存储大文本字符数据
	* mysql数据库类型-对应-java数据类型：
	* 	sql-Text类型 -对应-> java-Clob类型
	* 	sql-Blob类型-对应-> java-Blob类型
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-2-19 下午8:29:59
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void saveClob() throws Exception {
		String sql = "insert into t_lob(id, bigText, image, vedio) values(?, ?, null, null) ; " ;
		File file = new File("lobFile/upload/log.txt") ;
		Reader reader = new FileReader(file) ;
		char[] ch = new char[(int) file.length()] ;	//数据量大时，内存可能会溢出，因此不推荐使用该方法，推荐使用PreparedStatement进行大数据操作
		reader.read(ch) ;	
		Clob clob = new SerialClob(ch);
		//使用DBUtils工具存储大文本数据
		queryRunner.update(sql, UUID.randomUUID().toString(), clob) ;
	}
	
	/**
	* @Name: saveBlob
	* @Description: 使用DBUtils存储二进制大数据（图片、视频、音频等）
	* mysql数据库类型-对应-java数据类型：
	* 	sql-Text类型 -对应-> java-Clob类型
	* 	sql-Blob类型-对应-> java-Blob类型
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-2-19 下午8:43:32
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void saveBlob() throws Exception {
		String sql = "insert into t_lob(id, bigText, image, vedio) values(?, null, ?, null) ; " ;
		File file = new File("lobFile/upload/HelloWorld.png") ;
		byte[] buf = new byte[(int) file.length()] ; //数据量大时，内存可能会溢出，因此不推荐使用该方法，推荐使用PreparedStatement进行大数据操作
		InputStream is = new FileInputStream(file) ;
		is.read(buf) ;
		Blob blob = new SerialBlob(buf) ;
		//使用DBUtils工具存储二进制大数据内容
		queryRunner.update(sql, UUID.randomUUID().toString(), blob) ;
	}
	
	
}













